泛化类的定义中<? extends T>和<? super T>各代表什么意思?

来源:百度知道 编辑:UC知道 时间:2024/05/03 19:51:10
请举几个例子说明这两种方法该如何正确使用,尤其是对于要求返还T类型的方法该如何定义。

1. <? super T> 表示以T类型为下限的某种类
实例化的时候对象的泛型一定要大于等于T类型(也就是T的父类或自己)
使用的时候类型一定要小雨等于T类型(也就是T的子类或自己)

2. <? extends T> 表示以T类型为上线的某种类
实例化的时候对象的泛型一定要小于等于T类型(也就是T的子类或自己)

3. demo
List<? extends Fruit> list = new ArrayList<Apple>();
list.add(null); // right
list.add(new Fruit()); //error
list.add(new Apple()); //error
list.add(new SmallApple()); //error
// <? extends T>是T的某种子类,能放入子类的容器不一定放入超类,也就是没可能放入T

List<? super Apple> list = new ArrayList<Fruit>();
list.add(null); // right
list.add(new Fruit()); // error
list.add(new Apple()); // right
list.add(new SmallApple()); // right

<? extends T>代表方括号中必须是任意的T的子类或者T自己

第一个表示尖括号中类型必须是T的子类或T自己,第二个表示尖括号中类型必须是T的超类或T自己